package com.atguigu.gmall.cart.controller;

import com.atguigu.gmall.cart.service.CartInfoService;
import com.atguigu.gmall.common.constant.CartConst;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.model.cart.CartInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * projectName: gmall
 *
 * @author: 陈鹏
 * time: 2022/10/7 16:05 星期五
 * description: 购物车的controller层
 */
@RestController
@RequestMapping(value = "/api/cart")
public class CartInfoController {

    @Autowired
    private CartInfoService cartInfoService;

    /**
     * 往购物车添加数据
     * @param skuId
     * @param num
     * @return
     */
    @GetMapping("/addCart")
    public Result addCart(Long skuId,Integer num){
        cartInfoService.addCart(skuId,num);
        return Result.ok();
    }

    /**
     * 查询用户购物车数据
     * @return
     */
    @GetMapping("/getCartInfo")
    public Result getCartInfo(){
        return Result.ok(cartInfoService.getCartInfo());
    }

    /**
     * 删除用户购物车数据
     * @param id
     * @return
     */
    @GetMapping("/removeCart")
    public Result removeCart(Long id){
        cartInfoService.removeCart(id);
        return Result.ok();
    }

    /**
     * 选中
     * @param id
     * @return
     */
    @GetMapping("/check")
    public Result check(Long id){
        cartInfoService.checkOrUncheck(CartConst.CART_CHECKED,id);
        return Result.ok();
    }

    /**
     * 取消选中
     * @param id
     * @return
     */
    @GetMapping("/unCheck")
    public Result unCheck(Long id){
        cartInfoService.checkOrUncheck(CartConst.CART_UNCHECKED,id);
        return Result.ok();
    }

    /**
     * 合并用户购物车数据(用户登录前与用户登录后)
     * @param cartInfoList
     * @return
     */
    @GetMapping("/mergeCart")
    public Result mergeCart(@RequestBody List<CartInfo> cartInfoList){
        cartInfoService.mergeCart(cartInfoList);
        return Result.ok();
    }

    /**
     * 查询指定用户选中的购物车数据
     * @return
     */
    @GetMapping(value = "/getCheckCart")
    public Result getCheckCart(){
        return Result.ok(cartInfoService.getCheckCart());
    }
}
